Ecco a voi una manciata di righe per sincronizzare iPhone, iPod Touch ed iPad in background con la soddisfazione di aver fatto una breve escursione nel mondo degli scripts.
Doug Adams, un vero e proprio guru nel mondo AppleScript, ha voluto condividere con la community uno spaccato del suo quotidiano e… qualche riga di codice grazie a cui poter sincronizzare in modo automatico, e rigorosamente in Wireless, i nostri iDevice con iTunes. Pomo della discordia la tediosità nel dover invocare manualmente la sincronizzazione del suo iPhone 3GS che, passato il testimone al piu’ recente iPhone 4, è stato relegato da Doug a telefono-orologio/sveglia/radio in particolare per la riproduzione dei suoi podcast preferiti.
Lo sviluppatore è solito ascoltare le trasmissioni nella sera per questo ha pensato ad una soluzione che gli permettesse di sincronizzare con iTunes il melafonino durante l’ora di pranzo, in modo tale da arrivare a sera con un set completo di podcast da riprodurre.
Per raggiungere questo obiettivo è stato creato un agente launchd in modo tale che, dopo aver verificato l’esecuzione di iTunes sul Mac, ne invocasse la sincronizzazione, se attivo, o l’apertura e sincronizzazione in caso contrario ma è necessario che anche l’iPhone/iPod/iPad sia impostato per la sincronizzazione via Wireless altrimenti lo script non saprà quale terminale sincronizzare.
Procediamo quindi con la creazione dello script, aprendo l’Editor AppleScript ed eseguendo, in un nuovo documento, il copia incolla di quanto a seguire:
if not checkItunesIsActive() then return
tell application “iTunes”
try
set src to (some source whose name contains “3GS”)
tell src to update
end try
end tell
to checkItunesIsActive()
tell application id “sevs” to return (exists (some process whose name is “iTunes”))
end checkItunesIsActive
Nel sorgente abbiamo evidenziato la stringa 3GS: si tratta a tutti gli effetti di un parametro contenente l’identificativo dell’iDevice, una parte del nome che abbiamo assegnato al nostro dispositivo da sincronizzare (ad esempio “iPhone 3GS di iPhoneItalia“). Non è necessario quindi inserire il nome per intero, è sufficiente una parte ma l’importante è che non vi siano altri terminali sincronizzabili con porzioni di nome simile (da evitare ad esempio parametri che possano generare conflitti come il termine iPhoneItalia avendo terminali denominati “iPhone 3GS di iPhoneItalia” e “iPhone4S di iPhoneItalia“).
Analizzando nel dettaglio lo script, rileviamo:
- l’handler checkItunesIsActive() serve a verificare se iTunes sia o meno in esecuzione ed in caso contrario ad invocarlo tramite il comando successivo tell application “iTunes”
- set src to (some source whose name contains “3GS”) permette di identificare l’iDevice oggetto della sincronizzazione
- il comando update inizializza la sincronizzazione tra iTunes e terminale eseguita nel blocco try che offre anche una “via di fuga” dolce nel caso in cui la sincronizzazione non venisse effettuata correttamente (nel caso in cui, ad esempio, l’apparato fosse spento o fuori portata)
- Carichiamo un editor di testi qualsiasi, TextEdit va benissimo, ed incolliamo in testo seguente all’interno di un documento vuoto:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Disabled</key> <false/> <key>Label</key> <string>com.YOURUSERNAME.SyncMyDeviceAgent</string> <key>Program</key> <string>/usr/bin/osascript</string> <key>ProgramArguments</key> <array> <string>osascript</string> <string>/Users/ILNOSTRONOMEUTENTE/Library/iTunes/Scripts/Sync My Device.scpt</string> </array> <key>StartCalendarInterval</key> <dict> <key>Hour</key> <integer>18</integer> <key>Minute</key> <integer>0</integer> </dict> </dict> </plist>
- sostituiamo al parametro ILNOSTRONOMEUTENTE quanto esattamente richiesto (il nostro nome utente…) e ai due parametri orari 18 (ora) e 0 (minuti) il periodo in cui si desidera avviare la sincronizzazione.
- Quando fatto, salviamo il tutto con il nome com.ILNOSTRONOMEUTENTE.SyncMyDeviceAgent.plist (sempre con la medesima sostituzione), in formato testo piano, all’interno del percorso [startupdisk]/Library/LaunchAgents/ .