Perhaps as discussed in the past, I would like to know how to get the version of an application on MacOS.
I know that I can easily get it using AppleScript as follows, but I don’t want to use AppleScript since 10.14, because I have to make the user OK to use it.
set a to "/Applications/Adobe InDesign 2020/Adobe InDesign 2020.app" as POSIX file as alias
tell application "Finder"
get version of a
end tell
You need to read the plist of the app. Here is a function that uses the MBS plugin:
[code]Private Function getBundleVersion(theFolderitem as FolderItem) as String
if theFolderitem = nil then Return “0”
dim theApplication as FolderItem = theFolderitem.Child(“Contents”)
if theApplication = nil then Return “0”
theApplication = theApplication.Child(“info.plist”)
if theApplication = nil then Return “0”
dim theBinStream as BinaryStream = BinaryStream.Open(theApplication, false)
if theBinStream = nil then Return “0”
dim thePlist as String = theBinStream.Read(theBinStream.Length)
dim theObject as CFObjectMBS = NewCFObjectMBSFromXML(thePlist)
if theObject = nil then Return “0”
dim theDictionary as CFDictionaryMBS = CFDictionaryMBS(theObject)
if theDictionary = nil then Return “0”
theObject = theDictionary.Value(NewCFStringMBS(“CFBundleShortVersionString”))
dim version as String = CFStringMBS(theObject).Str
Return version
End Function[/code]
Thanks Beatrix!
As you pointed out, I think that many of the answers in my search were “Read Info.plist.” I’m sure it’s a common way.
But I don’t want to use too complicated a method just to get general information like the version.
But the method you have taught will certainly help when I want to get more information about the application.
Thank you very much.
Private Function getBundleVersion(theFolderitem as FolderItem) as String
Dim item As New MDItemMBS(theFolderitem)
Dim v As Variant = item.GetAttribute("kMDItemVersion")
return v
end function