Добре, тому я відповідаю на власне запитання. Можна робити те, що я хотів, хоча не знайшов задовільного рішення.
Коротка відповідь: Я не міг знайти спосіб використання яблучного сценарію при безпосередньому маніпулюванні графічним інтерфейсом (наприклад, клацання). Я знайшов спосіб, використовуючи ключові альтернативи. Щоб виконати точну роботу, яка мені потрібна, буде виконана наступна послідовність:
- після відкриття документа в Numbers відкрийте вікно спільного доступу:
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
- коли відкриється спадне вікно спільного доступу, використовуйте наступну комбінацію клавіш
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}
Довга відповідь: це біль у шиї з ряду причин.
По-перше, коли ви створюєте файл Numbers, це простий файл. Однак, коли він ділиться спільно або коли він зберігається в iCloud, він стає пакетом. Applescript розглядає пакунки як папки, тому вам доведеться зробити деяку перевірку, перш ніж робити що-небудь, чи є те, з чим ви маєте справу - це папка чи пакет. Потім можна перейти до операцій спільного використання.
Тепер я не знайшов принципового способу перехоплення, коли саме файл стає пакетом. Тобто, коли ви відкриєте файл Numbers і попросите його поділитися, ви побачите, що Numbers надає вам повідомлення про "підготовку документа для спільного використання". Це я знайшов, коли файл перетворюється в пакет. Є властивість, яку можна використовувати, щоб перевірити, чи відповідає вказаний шлях пакету чи одному файлу: можна циклічити (папка пакета item_info є помилковим), а потім продовжити, але ця властивість стає також істинною до того, як "Номери" закінчили свою "підготовку документа до спільного використання". Тож я міг лише здогадуватися, коли зможу продовжити та перейти до спільної частини сценарію. Я кладу приблизно 30 секунд, коли файл ще не є пакетом,
if (this_package_folder is false) and (this_extension is in the extension_list) then
delay 30
end if
По-друге, ви повинні бути в хорошій мережі, так що всі операції, пов'язані з Numbers в iCloud, можна буде виконувати безперебійно - інакше iCloud видасть вам повідомлення про помилки, які блокують виконання сценарію
По-третє, ви повинні подбати про .DS_Store файли та інші файли, які можуть знаходитися всередині папки, куди ви поміщаєте ваші Numbers документи для спільного використання.
По-четверте, якщо ви хочете визначити, де знаходиться папка iCloud з документами, якими слід ділитися, зсередини AppleScript ви не побачите її так, як бачите в пошуку (тобто в iCloud Drive), але вам доведеться шукати для цього в / yourUser / Library / Mobile Documents / iCloud Drive / у вашій папці.
З усіма цими застереженнями, ось сценарій, який я зараз використовую. У моїй системі вона працює. Він передбачає кілька речей:
- у вашому iCloud є папка, де є ваші документи на номери
- у вас є файл, де ви хочете зберегти шляхи до файлів, якими ви будете ділитися, щоб ви знали шляхи, якими ви маєте спілкуватися з тими, з ким ви хочете поділитися своїми файлами. У моєму випадку я використовую документ Pages.
- файли, якими слід ділитися, НЕ вже надані. В іншому випадку сценарій видасть помилки.
- вас не хвилюють помилки та стиль. У скрипті немає перевірок помилок. Я не програміст.
Сценарій попросить вас спочатку визначити папку з документами, якими слід ділитися, а потім файл Сторінки, де ви хочете зберегти шляхи до спільних документів, а потім відкриє документи, якими слід ділитися один за одним, поділиться ними, збереже їх, скопіює їх шлях до вибраного вами документа "Сторінки" і, нарешті, вийде з "Чисел і Сторінок". Дайте багато часу для виконання сценарію і не заважайте йому. Зверніть увагу, що відкриваючи кожен файл Numbers, ви можете змінити сценарій так, щоб ви вставляли конкретні операції, які ви хочете виконати у своїх файлах, завжди з однаковою технікою (наприклад, у моєму випадку мені потрібно знайти клітинку, знайти значення, скопіюйте його десь інше і збережіть. Ця частина процедури відсутня в сценарії нижче.
Тепер, якщо хтось знайде спосіб ПЕРЕВІРИТИСЯ операції, видалити спільний доступ до спільних файлів, і, особливо, спосіб сказати, чи файл НАДАЄ загальний доступ чи ні, так що сценарій набуває загальності ...
Я вставляю сценарій нижче.
-- 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