2009-01-31 8 views

risposta

7

Non sono su un Mac, quindi potrebbe esserci un modo migliore per farlo, ma il primo approccio che viene in mente è l'esecuzione di un comando shell per interrogare la versione del sistema operativo.

http://developer.apple.com/technotes/tn2002/tn2065.html#TNTAG2

http://developer.apple.com/DOCUMENTATION/Darwin/Reference/ManPages/man1/sw_vers.1.html

Sulla base di questi riferimenti, probabilmente vuole fare qualcosa di simile:

set os_version to do shell script "sw_vers -productVersion" 
+0

Questo funziona davvero bene. –

+0

Non importa, ora vedo la differenza, bah! Do la colpa di essere stanco: P – HappyCodeMonkey

2

Io non sono troppo familiarità con AppleScript, ma per quanto ne so è possibile ottenere alcune informazioni sulle versioni dalla shell con il comando sw_vers. Per esempio:

Macintosh:~ udekel$ sw_vers 
ProductName: Mac OS X 
ProductVersion: 10.5.6 
BuildVersion: 9G55 

Se è possibile leggere e analizzare che da AppleScript, che può essere una soluzione, anche se sono sicuro che ci deve essere qualcosa di più elegante.

0

Prova qualcosa in queste righe:

tell application "Terminal" 
activate 

set theVersion to do script with command "sw_vers -productVersion" 
end tell 

Edit: è stato sottolineato che questo fa o penna il terminale, e che probabilmente non è il comportamento che si desidera.

+3

Cosa succede se il terminale non è in esecuzione? Questo lo lancerà, spaventando la maggior parte degli utenti. –

+1

È vero, tuttavia, supponevo che il poster avrebbe modificato questo codice in base alle proprie esigenze. – HappyCodeMonkey

4

È possibile ottenere la versione da App Finder così

tell application "Finder" 
    set os_version to version 
end tell 

display dialog os_version 

Sulla mia macchina questa mostra "10.5.8".

+0

Restituisce la versione del Finder e non la versione del sistema operativo. Nel mio caso (6 anni dopo = P) la versione del Finder è 10.10.4 mentre la versione os è 10.10.3. –

16

Ecco come ottenere la versione OSX in AppleScript, utilizzando le funzioni built-in:

 
set sysinfo to system info 
set osver to system version of sysinfo 

su OS X Mavericks il risultato è "10.9".

One-liner: set osver to system version of (system info)

+0

Questo sembra essere il modo più "corretto", poiché fa affidamento completamente sulle funzioni integrate –

+0

Qualche idea su come ciò potrebbe essere fatto in JXA (JavaScript for Automation)? Non sembra avere e oggetto SystemInfo. –

12

È possibile ottenere la versione del sistema operativo come una stringa display utilizzando:

set _versionString to system version of (system info) 

Se si vuole confrontare questo a un'altra versione, assicurarsi di utilizzare considering numeric strings:

In caso contrario, è possibile che si verifichino problemi come "10.4.11" inferiore a "10.4.9" o "10.10" inferiore a "10.9".

È inoltre possibile utilizzare system attribute.Questo consente di ottenere il numero di versione come un numero intero in modo che non c'è bisogno di preoccuparsi di confronto separati da punti stringhe:

set _versionInteger to system attribute "sysv" -- 4240 == 0x1090 (Mac OS X 10.9) 
set _isMavericksOrBetter to (system attribute "sysv") ≥ 4240 -- 0x1090 
set _isMountainLionOrBetter to (system attribute "sysv") ≥ 4224 -- 0x1080 
set _isLionOrBetter to (system attribute "sysv") ≥ 4208 -- 0x1070 

È inoltre possibile utilizzare system attribute per ottenere i singoli componenti della versione senza dover analizzare una stringa :

1

Mi dispiace di essere in ritardo per la festa, ma stavo cercando di risolvere questo problema oggi.

Sembra che l'attributo di sistema "sysv" sia ancora impostato su 4240 in 10.10.0 Yosemite. Quando ottengo in 10.9.5 ottengo 4245. Sto assumendo che dovrebbe essere un valore superiore a 4240 in Yosemite?

0

questo ha lavorato per me

set OSVersion to system version (system info) 
 
if OSVersion as string < "10.9" or OSVersion as string > "10.9.5" then 
 
- Add code to execute if condition met 
 
else 
 
- Add code to execute if condition not met 
 
end if