2016-12-06 17 views
0

Основано на productbuildDistribution XML structure, pkg-refversion атрибут автозаполняется productbuild. Вы также можете указать версию пакета, используя параметр --version, до productbuild.Как установить программу установки пакета Mac для проверки версии?

Я сделал два пакета: пакет A с версией 1.0 и пакет B с теми же двоичными файлами с версией 2.0. Эти версии были даны тремя способами:

  1. Как --version параметр
  2. В версии бинарного упакованной
  3. версия значения в файле Distribution.xml

Тем не менее, кажется, установщик не проверить версию и просто установить любой запущенный пакет. Если вы сначала установите версию 2.0, а затем запустите пакет версии 1.0, приложение будет перезаписано.

Как установить установщик для проверки версий? Есть ли ключ/атрибут/параметр, который мне нужно указать где-нибудь, чтобы сделать версию пакета чувствительной?

ответ

1

В коде Distribution.xml, добавьте эту функцию:

function dontDowngrade(prefix) { 
    if (typeof(my.result) != 'undefined') my.result.message = system.localizedString('ERROR_2'); 
    var bundle = system.files.bundleAtPath(prefix + '/Applications/YOURAPPNAMEHERE'); 
    if (!bundle) { 
     return true; 
    } 
    var bundleKeyValue = bundle['CFBundleShortVersionString']; 
    if (!bundleKeyValue) { 
     return true; 
    } 
    if (system.compareVersions(bundleKeyValue, '$packageVersion') > 0) { 
     return false; 
    } 
    return true; 
} 

Строка ошибки ERROR_2 находится в Localizable.strings:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
<key>ERROR_0</key> 
<string>This update requires Mac OS X version %@ or later.</string> 
<key>ERROR_1</key> 
<string>This software is not supported on your system.</string> 
<key>ERROR_2</key> 
<string>A newer version of this software is already installed. </string> 
<key>SU_TITLE</key> 
<string>YOURAPPNAMEHERE</string> 
</dict> 
</plist> 

я положил все это в Баш скрипт и использовать здесь документ для замены текста с переменными оболочки. Например, $ packageVersion - это версия моего приложения, например. "2.0.0.0". Строка YOURAPPNAMEHERE также может быть заменена переменной оболочки.

cat <<EOF >"Distribution.xml" 
<?xml version="1.0" encoding="utf-8"?> 
...other text... 
EOF 

Вы можете многому научиться, изучив установщик iTunes. Загрузить программу установки, смонтировать его, перетащить файл .pkg, и расширить его:

$ /usr/sbin/pkgutil --expand Install\ iTunes.pkg iTunesExpanded 

Затем вы можете увидеть код и тыкать вокруг

+0

Спасибо за это! Это очень хороший результат. Особенно показано на примере iTunes.pkg. Никогда не думал проверить этот пакет. – radj