From 8daa80bb42e3e4cf6e310729eb05f076364332da Mon Sep 17 00:00:00 2001 From: alexandrev-tibco Date: Fri, 18 Sep 2026 23:02:04 +0200 Subject: [PATCH] Firma manual de los targets del Apple Watch para App Store MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Los dos targets de watchOS seguían en firma automática y el export no tenía sus perfiles, así que la build 88 nunca llegó a subirse. Ahora: - PortfolioJournalWatch y PortfolioJournalWatchWidget en Release con CODE_SIGN_STYLE = Manual y sus perfiles App Store recién creados en el portal ("Portfolio Journal Watch App Store" / "... Watch Widget App Store"). - CODE_SIGN_IDENTITY con el nombre completo "Apple Distribution: Alexandre Vazquez" en los cinco targets embebidos, en vez del genérico. - ExportOptions.plist y el script de release con los CINCO bundle ids en provisioningProfiles (faltaban los dos del reloj). - El script valida con `altool --validate-app` antes de subir, para no gastar un número de build en un IPA que la App Store va a rechazar. Con la firma totalmente manual y los perfiles instalados en local, el archive ya no necesita -allowProvisioningUpdates ni la API key, así que esquiva el bug del bearer token de xcodebuild. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01F1u4K16xy7eQVtgsYNZ9Vn --- ExportOptions.plist | 28 ++++++++++++++++++++-- PortfolioJournal.xcodeproj/project.pbxproj | 14 +++++++---- Scripts/archive_and_upload_appstore.sh | 26 ++++++++++++++++++-- 3 files changed, 59 insertions(+), 9 deletions(-) diff --git a/ExportOptions.plist b/ExportOptions.plist index 601de3e..7090f73 100644 --- a/ExportOptions.plist +++ b/ExportOptions.plist @@ -2,13 +2,37 @@ + destination + export + manageAppVersionAndBuildNumber + method app-store-connect + + signingStyle + manual + signingCertificate + Apple Distribution + provisioningProfiles + + com.alexandrevazquez.PortfolioJournal + porfoliojournal + com.alexandrevazquez.PortfolioJournal.PortfolioJournalWidget + Portfolio Journalwidget + com.alexandrevazquez.PortfolioJournal.QuickUpdate + PortfolioJournal QuickUpdate AppStore + com.alexandrevazquez.PortfolioJournal.watchkitapp + Portfolio Journal Watch App Store + com.alexandrevazquez.PortfolioJournal.watchkitapp.widget + Portfolio Journal Watch Widget App Store + + stripSwiftSymbols + teamID 2825Q76T7H uploadSymbols - signingStyle - automatic diff --git a/PortfolioJournal.xcodeproj/project.pbxproj b/PortfolioJournal.xcodeproj/project.pbxproj index caee36e..b9a886c 100644 --- a/PortfolioJournal.xcodeproj/project.pbxproj +++ b/PortfolioJournal.xcodeproj/project.pbxproj @@ -730,7 +730,7 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_ENTITLEMENTS = PortfolioJournal/PortfolioJournal.entitlements; ENABLE_USER_SCRIPT_SANDBOXING = YES; - CODE_SIGN_IDENTITY = "Apple Distribution"; + CODE_SIGN_IDENTITY = "Apple Distribution: Alexandre Vazquez"; CODE_SIGN_STYLE = Manual; PROVISIONING_PROFILE_SPECIFIER = "porfoliojournal"; CURRENT_PROJECT_VERSION = 89; @@ -923,7 +923,7 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; CODE_SIGN_ENTITLEMENTS = PortfolioJournalWidgetExtension.entitlements; - CODE_SIGN_IDENTITY = "Apple Distribution"; + CODE_SIGN_IDENTITY = "Apple Distribution: Alexandre Vazquez"; CODE_SIGN_STYLE = Manual; PROVISIONING_PROFILE_SPECIFIER = "Portfolio Journalwidget"; CURRENT_PROJECT_VERSION = 89; @@ -1077,7 +1077,7 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_ENTITLEMENTS = PortfolioJournalQuickUpdateExtension.entitlements; - CODE_SIGN_IDENTITY = "Apple Distribution"; + CODE_SIGN_IDENTITY = "Apple Distribution: Alexandre Vazquez"; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 89; DEVELOPMENT_TEAM = 2825Q76T7H; @@ -1146,7 +1146,9 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = PortfolioJournalWatch.entitlements; - CODE_SIGN_STYLE = Automatic; + CODE_SIGN_IDENTITY = "Apple Distribution: Alexandre Vazquez"; + CODE_SIGN_STYLE = Manual; + PROVISIONING_PROFILE_SPECIFIER = "Portfolio Journal Watch App Store"; CURRENT_PROJECT_VERSION = 89; DEVELOPMENT_TEAM = 2825Q76T7H; ENABLE_PREVIEWS = YES; @@ -1215,7 +1217,9 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = PortfolioJournalWatchWidget.entitlements; - CODE_SIGN_STYLE = Automatic; + CODE_SIGN_IDENTITY = "Apple Distribution: Alexandre Vazquez"; + CODE_SIGN_STYLE = Manual; + PROVISIONING_PROFILE_SPECIFIER = "Portfolio Journal Watch Widget App Store"; CURRENT_PROJECT_VERSION = 89; DEVELOPMENT_TEAM = 2825Q76T7H; ENABLE_PREVIEWS = YES; diff --git a/Scripts/archive_and_upload_appstore.sh b/Scripts/archive_and_upload_appstore.sh index 5bbac5b..1def9d4 100755 --- a/Scripts/archive_and_upload_appstore.sh +++ b/Scripts/archive_and_upload_appstore.sh @@ -101,8 +101,8 @@ create_export_options() { method app-store-connect - signingStyle manual @@ -116,6 +116,10 @@ create_export_options() { Portfolio Journalwidget com.alexandrevazquez.PortfolioJournal.QuickUpdate PortfolioJournal QuickUpdate AppStore + com.alexandrevazquez.PortfolioJournal.watchkitapp + Portfolio Journal Watch App Store + com.alexandrevazquez.PortfolioJournal.watchkitapp.widget + Portfolio Journal Watch Widget App Store stripSwiftSymbols @@ -158,6 +162,23 @@ export_ipa() { -authenticationKeyIssuerID "$ISSUER_ID" } +validate_ipa() { + local ipa + ipa="$(find "$EXPORT_PATH" -maxdepth 1 -name '*.ipa' -print -quit)" + [[ -n "$ipa" ]] || fail "No se encontro ningun .ipa en $EXPORT_PATH" + + # Validar SIEMPRE antes de subir: pilla iconos ausentes, orientaciones de iPad + # incompletas e Info.plist mal formados sin gastar un numero de build. + echo "==> Validando $(basename "$ipa")" + API_PRIVATE_KEYS_DIR="$P8_DIR" \ + xcrun altool \ + --validate-app \ + --type ios \ + --file "$ipa" \ + --apiKey "$KEY_ID" \ + --apiIssuer "$ISSUER_ID" +} + upload_ipa() { local ipa ipa="$(find "$EXPORT_PATH" -maxdepth 1 -name '*.ipa' -print -quit)" @@ -189,6 +210,7 @@ main() { create_export_options archive_app export_ipa + validate_ipa upload_ipa echo "==> Proceso completado"