2016-12-06 20 views
0

productbuildDistribution XML構造に基づいて、pkg-refversion属性はproductbuildによって自動的に埋められます。 --versionパラメータをproductbuildに設定してパッケージのバージョンを指定することもできます。バージョンを確認するMacパッケージインストーラを強制する方法は?

バージョン1.0のパッケージAと、バージョン2.0の同じバイナリを持つパッケージBの2つのパッケージを作成しました。これらのバージョンは、3つの方法で指定された:

しかし

  • バージョン値Distribution.xmlファイル内にパックされたバイナリの存在のバージョンとして
  • パラメータ--versionとして、インストーラにはないようですバージョンを確認して、実行中のパッケージをインストールするだけです。最初にバージョン2.0をインストールしてから次にバージョン1.0パッケージを実行すると、そのアプリケーションは上書きされます。

    バージョンを確認するためにインストーラを強制する方法を教えてください。パッケージのバージョンを区別するためにどこかに指定する必要があるキー/属性/パラメータはありますか?あなたのDistribution.xmlコードで

  • 答えて

    1

    、この機能を追加します。

    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> 
    

    私はbashスクリプトでこのすべてを入れて使用しますここでは、テキストをシェル変数で置き換えます。例えば、$ 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

    関連する問題