2011-03-05 61 views
4

我有一個用於MAC OSX的Java應用程序,我編寫了一個.pkg文件。在創建.pkg時,我也給了它一個版本號。現在我需要在我的Java代碼中獲取此應用程序的版本號,以便在應用程序運行時檢查更新。當我右鍵點擊我的應用程序文件時,它不會顯示我在創建軟件包時輸入的版本。獲取.pkg文件的版本?

我是否需要設置我創建的應用程序文件的版本,使用jar捆綁器來創建pkg?

請給我建議我該怎麼做到這一點。

+0

有不同的策略來看看[這個答案](http://stackoverflow.com/questions/1389047/autoupdate-feature-in-a-java-swing-desktop-app/1403234#1403234)。不需要版本檢查。 – 2011-03-05 19:51:54

回答

1

創建包(在PackageMaker項目中)時設置的版本號是安裝程序的版本,而不是您的.app-File的版本。這是必要的,以便另一個安裝程序可以查看他是否降級了當前的安裝。安裝程序永遠不會查看它正在安裝到系統的內容。

要設置您的.app-Bundle版本,請右鍵單擊您的.app文件並從出現的菜單中選擇「顯示包內容」。打開文件夾「Contents」,在那裏你會找到一個名爲「Info.plist」的文件。你必須編輯這個文件,並且必須在那裏爲你的應用程序設置你的版本信息。您可以通過使用屬性列表編輯器(包含在Apple Developer Tools中)或其他工具(如BBEdit)來完成此操作。

要從您的應用程序中的.plist中讀取數據,您需要一個特殊的庫。我推薦Daniel Dreibrodt的Java property list library(關於您在this post on my blog中找到的.plist格式的更多信息)。

Generelly,你應該設置你的應用程序,捆綁的版本信息,反正你使用它的更新,目的或不是。如果沒有設置,用戶就沒有機會獲得他安裝的版本的信息,而無需啓動軟件。

你需要的不是你的.pkg文件的版本,你需要你的.app-Bundle的版本。無論如何 - 你的.pkg文件的版本的處理方式與你的.app文件相同。還有Info.plist,您可以在其中找到信息。它也可以用相同的庫進行分析。

0

pkg是一個zip文件,其中包含a.o.一個名爲PackageInfo的文件。 PackageInfo是一個XML文件看起來像這樣:

<pkg-info format-version="2" identifier="com.mycompany.pkg.MyApp" version="1.2.0" overwrite-permissions="false" install-location="/" auth="root"> 
<payload installKBytes="4717" numberOfFiles="146"/> 
<scripts> 
    <preinstall file="./preinstall"/> 
    <postinstall file="./postinstall"/> 
</scripts> 
<bundle-version> 
    <bundle path="./Applications/MyApp.app" CFBundleShortVersionString="1.2.0" CFBundleVersion="166" id="com.mycompany.MyApp" CFBundleIdentifier="com.mycompany.MyApp"> 
     <bundle path="./Contents/Library/LoginItems/HelperApp.app" CFBundleShortVersionString="1.0" CFBundleVersion="1" id="com.mycompany.HelperApp" CFBundleIdentifier="com.mycompany.HelperApp"/> 
    </bundle> 
</bundle-version> 
</pkg-info> 

要獲得軟件包的版本,可以使用以下XPath:

pkg-info/@version 

爲了讓應用程序版本:

pkg-info/bundle-version/bundle/@CFBundleShortVersionString 

而且內部版本號是在這裏:

pkg-info/bundle-version/bundle/@CFBundleVersion