2016-09-20 3 views
4

J'ai créé un package comprenant 2 composants en fonction du fichier --component-plist. sur le fichier plist J'ai ajouté le drapeau ci-dessous pour éviter downgrade:pkgbuild OSX, Appliquer l'échec d'installation en cas de rétrogradation

BundleIsVersionChecked: Don't install bundle if newer version on disk? (bool) 

quand je joue le scénario de déclassement, je reçois le message suivant:

Sep 15 11:42:49 os-x-10 installd[284]: PackageKit: Skipping component \ 
"com.my.driverAE21E" (<current_version>) because the version \ 
<new_version> is already installed at <my_component> 

Cela devrait, mais malheureusement, l'installation continue, et l'autre composant est correctement installé, ainsi que les scripts preinstall et postintsall - donc je reçois un mélange des deux versions.

Existe-t-il un moyen d'imposer la validation de la version du composant avant toute tentative d'installation et d'arrêter le processus d'installation si la validation n'a pas été réussie?

MISE À JOUR:

Une autre approche qui peut me aider est d'empêcher l'exécution de scripts de préinstallation et postinstallation en cas d'une tentative de rétrograder est fait.

J'ai vu une référence à une question sans réponse à ce sujet here.

Répondre

1

Ce que vous devez faire est d'ajouter la vérification de version à votre distribution.xml pour l'archive du produit, et ensuite effectuer la vérification que vous voulez dans le code JavaScript. Cela vous permettra d'empêcher le démarrage de l'installation le plus tôt possible en renvoyant false à partir de la fonction de vérification. Je ne peux pas vous donner un exemple car je n'ai jamais fait de vérification de version personnalisée, mais en utilisant my.target.receiptForIdentifier() et system.compareVersions() devrait vous aider à démarrer.

Plus d'informations à ce sujet: https://developer.apple.com/reference/installerjs (suivez le lien "Distribution XML Schema Reference" pour la distribution distribution.xml).