Firma manual de los targets del Apple Watch para App Store
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 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F1u4K16xy7eQVtgsYNZ9Vn
This commit is contained in:
+26
-2
@@ -2,13 +2,37 @@
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>destination</key>
|
||||
<string>export</string>
|
||||
<key>manageAppVersionAndBuildNumber</key>
|
||||
<false/>
|
||||
<key>method</key>
|
||||
<string>app-store-connect</string>
|
||||
<!-- Firma MANUAL obligatoria: el cloud signing con API key falla al exportar las
|
||||
extensiones ("No profiles ... were found"). Los 5 targets embebidos se firman
|
||||
con "Apple Distribution" + sus perfiles App Store instalados localmente. -->
|
||||
<key>signingStyle</key>
|
||||
<string>manual</string>
|
||||
<key>signingCertificate</key>
|
||||
<string>Apple Distribution</string>
|
||||
<key>provisioningProfiles</key>
|
||||
<dict>
|
||||
<key>com.alexandrevazquez.PortfolioJournal</key>
|
||||
<string>porfoliojournal</string>
|
||||
<key>com.alexandrevazquez.PortfolioJournal.PortfolioJournalWidget</key>
|
||||
<string>Portfolio Journalwidget</string>
|
||||
<key>com.alexandrevazquez.PortfolioJournal.QuickUpdate</key>
|
||||
<string>PortfolioJournal QuickUpdate AppStore</string>
|
||||
<key>com.alexandrevazquez.PortfolioJournal.watchkitapp</key>
|
||||
<string>Portfolio Journal Watch App Store</string>
|
||||
<key>com.alexandrevazquez.PortfolioJournal.watchkitapp.widget</key>
|
||||
<string>Portfolio Journal Watch Widget App Store</string>
|
||||
</dict>
|
||||
<key>stripSwiftSymbols</key>
|
||||
<true/>
|
||||
<key>teamID</key>
|
||||
<string>2825Q76T7H</string>
|
||||
<key>uploadSymbols</key>
|
||||
<true/>
|
||||
<key>signingStyle</key>
|
||||
<string>automatic</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -101,8 +101,8 @@ create_export_options() {
|
||||
<false/>
|
||||
<key>method</key>
|
||||
<string>app-store-connect</string>
|
||||
<!-- Firma MANUAL obligatoria: el cloud signing con API key falla al exportar la
|
||||
extensión QuickUpdate ("No profiles ... were found"). Los 3 targets se firman
|
||||
<!-- Firma MANUAL obligatoria: el cloud signing con API key falla al exportar las
|
||||
extensiones ("No profiles ... were found"). Los 5 targets embebidos se firman
|
||||
con "Apple Distribution" + sus perfiles App Store instalados localmente. -->
|
||||
<key>signingStyle</key>
|
||||
<string>manual</string>
|
||||
@@ -116,6 +116,10 @@ create_export_options() {
|
||||
<string>Portfolio Journalwidget</string>
|
||||
<key>com.alexandrevazquez.PortfolioJournal.QuickUpdate</key>
|
||||
<string>PortfolioJournal QuickUpdate AppStore</string>
|
||||
<key>com.alexandrevazquez.PortfolioJournal.watchkitapp</key>
|
||||
<string>Portfolio Journal Watch App Store</string>
|
||||
<key>com.alexandrevazquez.PortfolioJournal.watchkitapp.widget</key>
|
||||
<string>Portfolio Journal Watch Widget App Store</string>
|
||||
</dict>
|
||||
<key>stripSwiftSymbols</key>
|
||||
<true/>
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user