9
votes

L'archive Xcode 11 indique l'échec de PhaseScriptExecution

Après avoir migré mon projet de swift 3.2 vers swift 4 dans Xcode 10, j'essaie d'archiver dans Xcode 11 et me donne cette erreur:

PhaseScriptExecution Run \ Script /Users/desarrollo/Library/Developer/Xcode/DerivedData/MyApp-iOS-ewcyzseaubkujucenluznpmduhoo/Build/Intermediates.noindex/ArchiveIntermediates/MyApp-iOS-DEVildmediates/MyApp-iOS-DEVBuildMediates/RelipathiOS-DEVBuildMediates/MyApp-iOS-DEVBuildMedia -iOS-DEV.build/Script-E95AEDE51E54767F00B60429.sh (dans la cible 'MyApp-iOS-DEV' du projet 'MyApp-iOS')

. . .

/Users/desarrollo/Library/Developer/Xcode/DerivedData/MyApp-iOS-ewcyzseaubkujucenluznpmduhoo/Build/Intermediates.noindex/ArchiveIntermediates/DerivedData/MyApp-iOS-ewcyzseaubkujucenluznpmduhoo/Build/Intermediates.noindex/ArchiveIntermediates/MyApp-iOS-DEOS-DEV/IntermediateBuildFrançais .build / Script-E95AEDE51E54767F00B60429.sh: ligne 5: $ (CURRENT_PROJECT_VERSION) + 1: erreur de syntaxe: opérande attendu (le jeton d'erreur est "$ (CURRENT_PROJECT_VERSION) + 1")

Dans la pile d'erreurs, je trouve l' exportation CURRENT_PROJECT_VERSION = 114

Je n'ai aucun script avec "$ (CURRENT_PROJECT_VERSION) + 1", donc je ne sais pas quoi faire


1 commentaires

Il doit y avoir un bogue dans l'un de vos scripts.


4 Réponses :


21
votes

MISE À JOUR 2:

Cela provoque l'annulation des builds! Jetez un œil à la réponse de S1LENT WARRIOR ci-dessous, cela semble fonctionner mieux.

MISE À JOUR 1:

Dans la dernière version de Xcode (version 11.1), vous pouvez faire l'incrémentation automatique du numéro de build assez facilement.

Voici les étapes:

  1. Accédez aux Build Settings votre cible
  2. Rechercher un Versioning System des Versioning System
  3. Définissez sa valeur sur Apple Generic
  4. Accédez aux Build Phases votre cible
  5. Ajouter un nouveau script d'exécution
  6. Ajoutez la ligne suivante agvtool next-version -all

Faites cela pour toutes vos cibles et leurs numéros de build seront tous synchronisés et mis à jour chaque fois que vous exécutez l'une des cibles.

Vous avez cette réponse d'ici: https://stackoverflow.com/a/58237340/1432355

PS: comme dit dans un commentaire ci-dessous

L'utilisation de avgtool dans une phase d'exécution de script entraîne l'annulation de la construction

ORIGINAL:

Tu n'as rien fait de mal je pense.

Si vous accédez à votre info.plist vous verrez que le numéro de build a été remplacé par $(CURRENT_PROJECT_VERSION) (vous pouvez trouver la variable dans l'onglet Paramètres de build).

Je suppose que vous utilisez un script qui incrémente automatiquement le numéro de build et qui cause le problème (j'ai la même chose sur mon projet en ce moment).

Si vous supprimez ce script, votre application devrait se créer sans cette erreur.

Je n'ai pas encore trouvé de solution pour faire fonctionner le script avec cette nouvelle $(CURRENT_PROJECT_VERSION) . (Je mettrai à jour cette réponse lorsque j'aurai trouvé la solution)


6 commentaires

L'utilisation de avgtool dans une phase d' avgtool du script entraîne l'annulation de la construction. Avez-vous une solution de contournement à cela?


@ Rafał Oui, j'ai remarqué ça aussi ... Je reviendrai sur cette semaine prochaine et mettrai à jour cette réponse (encore une fois ..) une fois que j'aurai trouvé une solution qui fonctionne vraiment


@OliverD Si vous allez dans l'onglet Build Phases votre cible et cliquez sur le `` plus '' en haut, vous devriez avoir un popover avec un bouton indiquant New Run Script Phase


@Moucheg Une solution pour que la build soit annulée lors de l'archivage?


@Anuraj nop n'a rien trouvé qui fonctionne malheureusement ...


Cette solution fonctionne sur Xcode Version 12.2 (12B45b), Thx



5
votes

Changez simplement CFBundleVersion de $(CURRENT_PROJECT_VERSION) en nombre, dans mon cas est 1000 dans Info.plist

buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"

Ensuite, le shell sera OKey:

<key>CFBundleVersion</key>
<string>1004</string>


1 commentaires

et si vous souhaitez modifier current_project_version, vous pouvez trouver la réponse sur la documentation Apple developer.apple.com/library/archive/qa/qa1827/_index.html



5
votes

Toutes les réponses ci-dessus ne faisaient pas l'affaire par elles-mêmes, j'ai dû en calculer un certain nombre, y compris la documentation Apple (voir les références ci-dessous). Voici donc les étapes que j'ai suivies si cela aide quelqu'un à avoir toutes les étapes.

Dans Info.plist, définissez:

  • CFBundleShortVersionString à $ (MARKETING_VERSION)
  • CFBundleVersion à $ (CURRENT_PROJECT_VERSION)

Dans les paramètres de construction cible:

  • définir le système de gestion des versions sur "Apple Generic"
  • définissez la version actuelle du projet sur 1 (ou la version de votre choix)
  • définissez la version marketing sur 1.0.0 (ou la version de votre choix)

Dans le schéma> Archive:

  • ajouter une post-action "Exécuter l'action de script":
    • Fournissez les paramètres de construction à partir de: votre application
    • dans le script: cd ${PROJECT_DIR} ; xcrun agvtool next-version -all ;

  1. Document Apple mentionné par cuimingda : https://developer.apple.com/library/archive/qa/qa1827/_index.html
  2. Certaines des étapes mentionnées par moucheg

1 commentaires

J'ai suivi exactement les mêmes étapes. Mais l'Archive continue de s'annuler. J'utilise Xcode 11. Une solution pour éviter l'annulation de l'archive?



3
votes

Voici le script qui a fonctionné pour moi sur Xcode 11+
Ajoutez simplement une nouvelle Run Script Phase d' Run Script Phase à vos Build Phases
Ajoutez-le sous la phase Link Binary with Libraries .

#!/bin/sh

# To make executable, use: chmod u+x Build-Versioning-Scripts/Increment_Build_Number.sh
# to locate your target's info.plist use
# ${PRODUCT_SETTINGS_PATH}

echo "----"
echo "Info.plist for target: ${PRODUCT_SETTINGS_PATH}"

buildNum=$(/usr/libexec/Plistbuddy -c "Print CFBundleVersion" "${PRODUCT_SETTINGS_PATH}")
echo "Current build #: $buildNum"

if [ -z "$buildNum" ]; then
echo "No build number found in $PRODUCT_SETTINGS_PATH"
exit 2
fi

buildNum=$(expr $buildNum + 1)
echo "Build # incremented to: $buildNum"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNum" "$PRODUCT_SETTINGS_PATH"
echo "----"
exit 0 

Ce script a été initialement publié ici par Alex Zavatone .

J'espère que cela t'aides


1 commentaires

Cela fonctionne parfaitement! Toutes les solutions liées aux outils avg entraînent l'annulation de l'archive. Cela a fonctionné pour moi dans Xcode 11.