OK, quindi rispondo alla mia stessa domanda.
È possibile fare ciò che volevo, anche se non ho trovato una soluzione soddisfacente.
La risposta breve è: non ho trovato modo di utilizzare il applescript con la manipolazione diretta dell'interfaccia grafica (ad esempio i clic). Ho trovato un modo usando le alternative chiave. Per fare il pezzo esatto di lavoro di cui avevo bisogno, la seguente sequenza farà:
- dopo aver aperto il documento in Numbers, apri la finestra di condivisione:
tell application "System Events"
tell process "Numbers"
delay 1
tell menu bar 1
tell menu bar item "Share"
tell menu "Share"
delay 1
click menu item "Share Link via iCloud…"
end tell
end tell
end tell
end tell
- una volta aperta la finestra a discesa Condividi, usa la seguente combinazione di tasti
tell application "System Events"
--add tabs
delay 1
key code 48
delay 1
key code 48
delay 1
-- use arrows to move to the right part of the 'Share' window
key code 124
delay 1
key code 124
delay 3
-- click return
key code 36
delay 8
-- save the file and close it
keystroke "s" using {command down}
delay 4
keystroke "w" using {command down}
La risposta lunga è: è un dolore al collo per una serie di motivi.
Innanzitutto, quando crei un file Numbers, è un file semplice. Tuttavia, quando è condiviso, o quando viene salvato in iCloud, diventa un pacchetto. Applescript vede i pacchetti come cartelle, quindi devi fare qualche controllo prima di fare qualsiasi cosa per sapere se ciò che stai trattando è una cartella o un pacchetto. Quindi puoi passare alle operazioni di condivisione.
Ora, non ho trovato alcun modo principale per intercettare quando esattamente un file diventa un pacchetto. Cioè, quando apri un file di Numbers e chiedi di condividerlo, vedrai che Numbers ti offre un messaggio di "preparazione del documento da condividere". Questo, ho trovato, è quando il file viene trasformato in un pacchetto. C'è una proprietà che si può usare per verificare se un dato percorso corrisponde a un pacchetto oa un singolo file: si può eseguire il ciclo while (la cartella del pacchetto di item_info è false) e poi continuare, ma questa proprietà diventa impostata come vero pozzo prima che Numbers abbia terminato il proprio "preparare il documento per condividere" il lavoro. Quindi ho potuto solo indovinare quando posso continuare e andare alla parte di condivisione della sceneggiatura. Metto un brusco ritardo di 30 secondi quando un file non è ancora un pacchetto, che dovrebbe dare un sacco di tempo a Numbers per completare le sue trasformazioni del file da condividere:
if (this_package_folder is false) and (this_extension is in the extension_list) then
delay 30
end if
In secondo luogo, devi essere su una buona rete, in modo che tutte le operazioni relative a Numbers in iCloud possano essere eseguite senza problemi - altrimenti, iCloud ti darà dei messaggi di errore che bloccheranno l'esecuzione del lo script
In terzo luogo, devi occuparti dei file .DS_Store e di altri file che potrebbero trovarsi nella cartella in cui hai messo i tuoi documenti di Numbers da condividere.
In quarto luogo, se vuoi identificare dove si trova la cartella iCloud con i documenti da condividere, da dentro AppleScript non lo vedrai come lo vedi dal Finder (cioè, nell'unità iCloud), ma lo farai devi cercarlo in / yourUser / Library / Mobile Documents / iCloud Drive / yourfolder.
Con tutti questi avvertimenti, ecco la sceneggiatura che sto usando ora. Nel mio sistema, funziona. Presuppone diverse cose:
- c'è una cartella nel tuo iCloud in cui i tuoi documenti di Numbers sono
- si dispone di un file in cui si desidera salvare i percorsi dei file che verranno condivisi, in modo da conoscere i percorsi che si devono comunicare a quelli con cui si desidera condividere i file. Nel mio caso, utilizzo un documento di Pages.
- i file da condividere NON SONO già condivisi. Altrimenti, lo script darà errori.
- non ti preoccupi degli errori e dello stile. Lo script non ha controlli di errore. Non sono un programmatore.
Lo script ti chiederà di identificare prima la cartella con i documenti da condividere, quindi il file di Pages in cui desideri salvare i percorsi dei documenti condivisi e quindi aprirà i documenti da condividere uno per uno, condividili, li salverà, copierà il loro percorso nel documento di Pages che hai selezionato e alla fine uscirà da Numbers and Pages. Dare un sacco di tempo per l'esecuzione dello script e non interferire con esso. Si noti che quando si apre ciascun file di Numbers, è possibile modificare lo script in modo da inserire operazioni specifiche che si desidera eseguire sui file, sempre con la stessa tecnica (ad esempio, nel mio caso ho bisogno di trovare una cella, trovare un valore, copialo da qualche altra parte e salvalo.Questa parte della procedura non è nello script seguente.È possibile aggiungere qualsiasi cosa la fantasia ti porta ad inventare come operazioni contorte e complicate).
Ora, se qualcuno trova un modo per REVERSE l'operazione, annullando la condivisione dei file condivisi e, soprattutto, un modo per dire se un file è GIÀ condiviso o meno, in modo che lo script acquisisca generalità ....
Incollo lo script qui sotto.
-- Beginning of the script
global f
property extension_list : {"numbers"}
tell application "Finder"
set source_folder to choose folder with prompt "Please select directory."
set posixSource_Folder to POSIX path of source_folder
tell application "System Events"
set these_items to POSIX path of disk items of folder posixSource_Folder
end tell
my createList(these_items)
end tell
on createList(these_items)
tell application "System Events"
tell application "Finder"
set f to (choose file with prompt "Choose a file where to store the paths")
end tell
end tell
set posixF to POSIX path of f
delay 2
tell application "Finder" to open file f
delay 1
repeat with i from 1 to the count of these_items
set this_item to item i of these_items
set the item_info to info for this_item
set this_extension to the name extension of item_info
if folder of the item_info is true and (package folder of the item_info is false) and (this_extension is not in the extension_list) then
process_folder(this_item)
else
if (this_extension is in the extension_list) then
process_item(this_item)
end if
end if
end repeat
close_files()
end createList
-- this sub-routine processes folders
on process_folder(this_folder)
-- set these_items to list folder this_folder without invisibles
set posix_this_folder to POSIX path of this_folder
tell application "System Events"
set these_items to POSIX path of disk items of folder posix_this_folder
end tell
repeat with i from 1 to the count of these_items
--set this_item to alias ((this_folder as Unicode text) & (item i of these_items))
set the item_info to info for this_item
set this_extension to the name extension of item_info
--if folder of the item_info is true and (this_extension is not in the extension_list) then
if folder of the item_info is true and (package folder of the item_info is false) and (this_extension is not in the extension_list) then
process_folder(this_item)
else
if (package folder of the item_info is true) and (this_extension is in the extension_list) and (alias of the item_info is false) then
process_item(this_item)
end if
end if
end repeat
end process_folder
-- this sub-routine processes files
on process_item(this_item)
set the item_info to info for this_item
set this_extension to the name extension of item_info
set this_package_folder to the package folder of item_info
set Posix_Item to POSIX path of this_item
set Posix_File to POSIX file Posix_Item
delay 1
--opening the Numbers file
tell application "Finder" to open Posix_File
delay 3
-- going to Numbers and making the file shared
tell application "System Events"
tell process "Numbers"
delay 1
tell menu bar 1
tell menu bar item "Share"
tell menu "Share"
delay 1
click menu item "Share Link via iCloud…"
end tell
end tell
end tell
end tell
-- extra time allowed for non packages
delay 3
end tell
if (this_package_folder is false) and (this_extension is in the extension_list) then
delay 30
end if
--tabs
tell application "System Events"
delay 1
key code 48
delay 1
key code 48
delay 1
-- arrows
key code 124
delay 1
key code 124
delay 3
-- returns
key code 36
-- leave some time for Numbers to actually share the file. Maybe you need more time for your system.
delay 8
-- saving and closing documents
keystroke "s" using {command down}
delay 4
keystroke "w" using {command down}
-- Now returning to the file where the paths have to be pasted
tell application "Finder" to open file f
delay 2
-- pasting the local Unix path
keystroke "v" using {command down}
delay 1
key code 48
delay 2
-- pasting the iCloud remote path of the shared document
set the clipboard to Posix_Item
delay 1
keystroke "v" using {command down}
delay 1
key code 48
key code 36
delay 1
keystroke "s" using {command down}
end tell
end process_item
--closing files
on close_files()
tell application "System Events"
tell process "Numbers"
tell menu bar 1
tell menu bar item "Numbers"
tell menu "Numbers"
delay 1
click menu item "Quit Numbers"
end tell
end tell
end tell
end tell
tell application "Finder" to open file f
delay 2
keystroke "q" using {command down}
delay 1
end tell
end close_files
-- end of the script