Utilizza l'identificativo del gruppo dell'app di destinazione (più flessibile)
Hai intenzione di mantenere una sola copia di MyApp.app
sull'intero sistema?
Se è così, puoi approfittare dell'identificatore del pacchetto di di MyApp.app
e fare in modo che i Servizi di avvio individuino tutti i dettagli più nitidi per te.
Questa soluzione è piuttosto flessibile; ha il vantaggio che puoi mettere il tuo flusso di lavoro di Automator ovunque tu voglia - non deve trovarsi nella stessa posizione di MyApp.app
, né in qualsiasi posizione fissa relativa ad esso.
Passi
Questi sono i passi che vuoi compiere:
-
Apri Terminal.app ed esegui il seguente comando:
osascript -e 'id of app "'"$(mdfind MyApp.app)"'"'
-
Il passaggio precedente avrebbe dovuto stampare una sola riga come risultato. Nota che cosa dice quella riga (per esempio com.example.MyApp
).
-
Apri il tuo flusso di lavoro in Automator.
-
Aggiungi un'azione Esegui script shell con il contenuto:
open -b com.example.MyApp
-
Salva il flusso di lavoro di Automator in qualsiasi cartella a tua discrezione - non c'è bisogno di metterlo in una posizione fissa rispetto a MyApp.app
.
-
Esegui il flusso di lavoro di Automator; dovrebbe lanciare MyApp.app
.
Spiegazione
Servizi di avvio
Questa soluzione sfrutta una parte di macOS denominata Launch Services, che mantenere un database a livello di sistema delle app e le relative proprietà :
Whenever a new application becomes known to the system (such as when the user drags it from an installation disk into the Applications folder), the application is registered with Launch Services, which copies the needed information about the application into its database. Launch Services can then use this information to determine the preferred application for opening a given document file or URL.
Il piano
La parte di informazioni a cui siamo interessati è l'identificatore del gruppo , o l'ID del gruppo.
Uno sviluppatore di app di solito assegna a ciascuna delle sue app un ID bundle univoco (si spera) globalmente. Possiamo approfittare di questa unicità se e solo se non c'è più di una singola app con lo stesso ID bundle sul nostro intero sistema - e solo una singola copia di quell'app. Nessun duplicato.
Calcolare il percorso
Il comando
mdfind MyApp.app
è solo un modo elegante per eseguire una ricerca Spotlight come scorciatoia una tantum al fine di individuare il percorso dell'app al momento. Abbiamo bisogno del percorso una sola volta per estrarre l'identificatore del pacco dell'app.
Spotlight (si spera) restituirà qualcosa del genere:
/Users/watermelon/foo/MyApp.app
Estrazione di CFBundleIdentifier
Racchiudere il percorso corrente dell'app nel seguente comando AppleScript:
id of app "/Users/watermelon/foo/MyApp.app"
è semplicemente un modo conveniente per ** estrarre la CFBundleIdentifier
** dal pacchetto MyApp.app
.
(Potresti anche aver cercato manualmente l'ID del gruppo facendo clic con il pulsante destro del mouse sull'app in Finder, scegliendo Mostra contenuto pacchetto , navigando alla sottocartella Contents
e aprendo Contents/Info.plist
in TextEdit, cerca la chiave che dice CFBundleIdentifier
e trova il valore String
di una riga più in basso.Penso che sia noioso, quindi preferisco sempre utilizzare il frammento di AppleScript / mdfind
.
Avvio di un'app per ID fascio
Infine, diamo un'occhiata al comando che si sta effettivamente utilizzando nel flusso di lavoro di Automator:
open -b com.example.MyApp
Questo comando è solo un modo tecnico per dire "Ehi macOS, sei un buon amico con launchd
, giusto? Puoi lanciare questa app per me? Oh beh, non mi sono mai preso la briga di cercare il percorso completo. Quello che so però è il suo CFBundleIdentifier
, che è com.example.MyApp
; vai a chiedere Avvia servizi e scopriranno il percorso ".