4 votes

Utiliser AppleScript pour synchroniser l'iPhone dans Catalina

Avant Catalina, j'utilisais un script pour déclencher une synchronisation sur mon iPhone et mon iPad - similaire à :

tell application "iTunes"
    tell every source whose kind is iPod to update
end tell

Catalina a supprimé iTunes et les appareils iOS sont désormais synchronisés à l'aide de Finder.

Que dois-je appeler pour déclencher une synchronisation dans le Finder ?

0 votes

Avez-vous essayé de modifier simplement iTunes à Music dans votre code ? Par ailleurs, les appareils ont fait partie de Recherche bien avant MacOS Catalina .

0 votes

@user3439894 - Oui, j'ai essayé d'utiliser "Musique". Les iPhones et iPads, etc. n'apparaissaient pas dans le Finder avant Catalina.

0 votes

Je voulais parler de la catégorie Périphériques dans le Finder, c'est-à-dire Finder > Préférences > Barre latérale > Périphériques, et non des périphériques qui s'affichent ou non, désolé pour la confusion. Ainsi, lorsque vous avez utilisé Music dans le code Le rapport d'activité, ce qui s'est passé, ce qui a été enregistré ?

5voto

Devin Points 141

Je me suis étendu sur dyindude La réponse de l'entreprise est de créer un seul script qui ouvre le Finder, navigue vers votre appareil dans la barre latérale, attend que le bouton de synchronisation apparaisse et clique dessus. Ceci suppose que votre appareil s'appelle iPhone :

tell application "Finder" to open ("/" as POSIX file)

tell application "System Events" to tell outline 1 of scroll area 1 of splitter group 1 of window 1 of application process "Finder"
    set theElements to first UI element of every row whose name is "iPhone"
    repeat with e in theElements
        try
            if name of e is "iPhone" then
                tell e to perform action "AXOpen"
                exit repeat
            end if
        end try
    end repeat
end tell

tell application "System Events" to tell application process "Finder"
    repeat until button "Sync" of splitter group 1 of splitter group 1 of window "iPhone" exists
    end repeat

    click button "Sync" of splitter group 1 of splitter group 1 of window "iPhone"
end tell

1 votes

C'est génial mais .... cela ne fonctionne que si le Finder a déjà ouvert la barre d'outils, sinon le :outline 1 of scroll area 1 of splitter group 1" reçoit un mauvais index. et je n'arrive pas à trouver comment dire au Finder de voir la barre d'outils - utiliser Applescript ressemble toujours à de la devinette plutôt qu'à de la programmation, et j'ai juste deviné de travers.

1voto

user247077 Points 968

Cet Applescript va cliquer sur le bouton "Sync" dans le Finder sur une fenêtre qui a déjà l'appareil ouvert :

tell application "System Events" to tell application process "Finder"
   click button "Sync" of splitter group 1 of splitter group 1 of window "device name"
end tell

L'Applescript suivant fera naviguer la "fenêtre 1" du Finder vers le périphérique nommé "nom du périphérique", où se trouve le bouton "Sync".

tell application "System Events" to tell outline 1 of scroll area 1 of splitter group 1 of window 1 of application process "Finder"
set theElements to first UI element of every row whose name is "device name"
        repeat with e in theElements
            try
                if name of e is "device name" then
                tell e to perform action "AXOpen"
                exit repeat
                end if
            end try
        end repeat
end tell

1voto

dwt Points 21

J'ai trouvé que j'ai dû personnaliser les scripts ci-dessus assez peu pour le rendre compatible avec MacOS Big Sur parce que le finder ne montre pas de manière fiable mon iPhone, même quand ils sont dans le même réseau wifi. Ce qui a aidé est de redémarrer l'AMPLibraryAgent et l'AMPDeviceDiscoveryDaemon.

Ainsi, l'AppleScript qui fonctionne enfin de manière fiable pour moi est le suivant :

set iPhoneName to "My iPhone Name"

-- Open Finder window
tell application "Finder" to open ("/" as POSIX file)

on isPhoneVisible(iPhoneName)
    tell application "System Events" to tell outline 1 of scroll area 1 of splitter group 1 of window 1 of application process "Finder"
        set theElements to first UI element of every row whose name is iPhoneName
        repeat with e in theElements
            try
                if name of e is iPhoneName then
                    return true
                end if
            end try
        end repeat
    end tell
    return false
end isPhoneVisible

if not isPhoneVisible(iPhoneName) then
    -- Restart daemon that shows the iPhone in the sidebar so it is actually visible
    do shell script "pkill -9 AMPDevicesAgent AMPDeviceDiscoveryAgent"
end if

-- Select iPhone
-- needs retry until the iPhone becomes visible
tell application "System Events" to tell outline 1 of scroll area 1 of splitter group 1 of window 1 of application process "Finder"
    set hasFoundPhone to false
    repeat while not hasFoundPhone
        set theElements to first UI element of every row whose name is iPhoneName
        repeat with e in theElements
            try
                if name of e is iPhoneName then
                    tell e to perform action "AXOpen"
                    set hasFoundPhone to true
                    exit repeat
                end if
            end try
        end repeat
        delay 1
    end repeat
end tell

-- Start sync
tell application "System Events" to tell application process "Finder"
    repeat until button "Sync" of splitter group 1 of splitter group 1 of window iPhoneName exists
        delay 1
    end repeat

    click button "Sync" of splitter group 1 of splitter group 1 of window iPhoneName
end tell

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X