From 1f87f6d1c7549f7515b937da4369ed7517acf35c Mon Sep 17 00:00:00 2001 From: Paul Nothaft Date: Wed, 2 Sep 2026 14:40:56 +0200 Subject: [PATCH] App wurde ohne App-Gruppe signiert - Vergleich traf sie nie An der fertigen .ipa gemessen: die Erweiterung trug com.apple.security.application-groups, die App nicht. Der Beleg waere also abgelegt, aber nie gefunden worden - Teilen meldet Erfolg, die Tanken-Seite bleibt leer. Genau die Sorte stiller Ausfall, gegen die dieses Projekt sonst ueberall anbaut. Ursache: die pbxproj fuehrt Werte mal mit, mal ohne Anfuehrungszeichen. Was addTarget schreibt, ist gequotet ("app.datametric360.teilen"); was Capacitor fuer die App erzeugt, steht nackt da (app.datametric360). Der Vergleich auf die gequotete Form lief damit fuer die App immer ins Leere, und CODE_SIGN_ENTITLEMENTS wurde dort nie gesetzt. Jetzt wird entquotet verglichen. Belegt am neu erzeugten Projekt: vier CODE_SIGN_ENTITLEMENTS statt zwei - Debug und Release beider Ziele. --- companion-app/scripts/ios-teilen-einrichten.mjs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/companion-app/scripts/ios-teilen-einrichten.mjs b/companion-app/scripts/ios-teilen-einrichten.mjs index 9a118ed..4ae2c02 100644 --- a/companion-app/scripts/ios-teilen-einrichten.mjs +++ b/companion-app/scripts/ios-teilen-einrichten.mjs @@ -52,6 +52,9 @@ const APP = dirname(HIER) const ZIEL_NAME = "DataMetric360Share" const BUNDLE_ID = "app.datametric360.teilen" const GRUPPE = "group.app.datametric360" + +/** pbxproj-Wert ohne die optionalen Anfuehrungszeichen. */ +const entquotet = (wert) => String(wert ?? "").replace(/^"|"$/g, "") const SCHEMA = "datametric360" const iosApp = join(APP, "ios", "App") @@ -159,7 +162,16 @@ try { const eintrag = konfigs[schluessel] if (!eintrag || typeof eintrag !== "object" || !eintrag.buildSettings) continue const s = eintrag.buildSettings - if (s.PRODUCT_BUNDLE_IDENTIFIER === `"${BUNDLE_ID}"` || s.PRODUCT_NAME === `"${ZIEL_NAME}"`) { + // Ohne Anfuehrungszeichen vergleichen: die pbxproj fuehrt Werte mal mit, + // mal ohne. Was `addTarget` schreibt, ist gequotet ("app.datametric360. + // teilen"), was Capacitor fuer die App erzeugt, steht nackt da + // (app.datametric360). Der Vergleich auf die gequotete Form traf deshalb + // die App nie - sie wurde ohne App-Gruppe signiert, waehrend die + // Erweiterung sie hatte. Ergebnis waere ein stiller Ausfall gewesen: + // teilen meldet Erfolg, die App findet nichts (2026-09-02 an der + // fertigen .ipa gemessen - Entitlements der App ohne + // application-groups). + if (entquotet(s.PRODUCT_BUNDLE_IDENTIFIER) === BUNDLE_ID || entquotet(s.PRODUCT_NAME) === ZIEL_NAME) { s.INFOPLIST_FILE = `"${ZIEL_NAME}/Info.plist"` s.CODE_SIGN_ENTITLEMENTS = `"${ZIEL_NAME}/${ZIEL_NAME}.entitlements"` s.IPHONEOS_DEPLOYMENT_TARGET = "14.0" @@ -168,7 +180,7 @@ try { s.SKIP_INSTALL = "YES" } // Die App selbst braucht ihre neue Entitlements-Datei. - if (s.PRODUCT_BUNDLE_IDENTIFIER === `"app.datametric360"`) { + if (entquotet(s.PRODUCT_BUNDLE_IDENTIFIER) === "app.datametric360") { s.CODE_SIGN_ENTITLEMENTS = `"App/App.entitlements"` } }