Automator utilizza la posizione attuale della directory

5

il mio obiettivo è utilizzare Automator per aprire un'applicazione con argomenti

open ./MyApp.app -arguments

eseguendo un Buddy.app condivisibile con Myapp.app (Automator / workflow). entrambe le app dovrebbero essere condivisibili con chiunque, quindi corrono subito.

il modo più semplice per farlo, sembra essere quello di eseguire Buddy.app all'interno della stessa cartella di MyApp.app. quindi posso spostare Buddy.app con MyApp.app ovunque e funzioneranno ancora insieme

per impostare i percorsi dei file relativi nello script bash,

open "$(pwd)"/myapp.app -arguments

l'unico problema è che Automator utilizza la directory home invece della directory dell'applicazione. cioè pwd è la directory home, e non la posizione del file reale.

in Automator l'output di

echo $(pwd)

è la mia home directory, / Users / User

quindi la domanda è: come ottenere Automator (Buddy.app) per rilevare la posizione corrente della cartella ed eseguire MyApp.app?

    
posta watermelon 04.04.2017 - 10:04
fonte

2 risposte

1

Fai in modo che il tuo flusso di lavoro calcoli il proprio percorso (più solido)

Funziona finché il flusso di lavoro di Automator risiede nella stessa directory come MyApp.app ; è possibile creare copie del flusso di lavoro o dell'app a propria discrezione e riutilizzarle tutte le volte che si desidera; niente deve essere unico.

Passi

Questi sono i passaggi per automatizzare l'avvio di MyApp.app :

  1. Apri il flusso di lavoro in Automator.

  2. Aggiungi un'azione Esegui AppleScript . Rimuovere tutti i codici di zona interna e sostituirlo con le seguenti righe:

    set AppleScript's text item delimiters to ":"
    set appPath to (text items 1 through -3 of (path to me as text) & {"MyApp.app"} as text)
    tell application "Finder" to open file appPath
    
  3. Salva il flusso di lavoro di Automator nella stessa cartella di MyApp.app .

  4. Esegui il flusso di lavoro di Automator; dovrebbe lanciare MyApp.app .

Spiegazione

set AppleScript's text item delimiters to ":"

Questo significa "Attento, ho intenzione di dividere una stringa presto; e voglio che tu usi il carattere : come i confini divisi. "

path to me as text

Questo indica al flusso di lavoro di capire il percorso verso se stesso; le componenti del percorso sono delimitate da due punti ( : ), che è un residuo di Classic Mac OS .

text items 1 through -3 of […] & {"MyApp.app"}

Questo taglia l'ultima parte del percorso e aggiunge MyApp.app al percorso.

[…] as text

Questo collega il percorso di nuovo insieme (di nuovo con : come delimitatore).

tell application "Finder" to open file appPath

Infine, questa linea finale causa il lancio di MyApp.app .

    
risposta data 06.04.2017 - 20:51
fonte
0

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:

  1. Apri Terminal.app ed esegui il seguente comando:

    osascript -e 'id of app "'"$(mdfind MyApp.app)"'"'
    
  2. Il passaggio precedente avrebbe dovuto stampare una sola riga come risultato. Nota che cosa dice quella riga (per esempio com.example.MyApp ).

  3. Apri il tuo flusso di lavoro in Automator.

  4. Aggiungi un'azione Esegui script shell con il contenuto:

    open -b com.example.MyApp
    
  5. 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 .

  6. 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 ".

    
risposta data 06.04.2017 - 20:48
fonte

Leggi altre domande sui tag