AppleScript als default application auch unter 10.8

Die Problemstellung war folgende:

Ich habe hier eine Warenwirtschaft, die Exporte immer als csv oder xml ausgibt.
Diese werden per Default von Excel geöffnet.

Das Problem:
Excel ist nun nicht die optimale Anwendung, um Dateien jenseits der 2MB Grenze schnell zu bearbeiten.

Die Lösung:
Ich lasse CSV-Dateien per Default nicht von Excel sondern von einem AppleScript öffnen, welches mit etwas PHP&Co die Auswertung im Bruchteil einer Sekunde erledigen kann ;-)

Wie macht man das?

  • Nun man speichert das Skript mit on open-handler als Anwendung ab
  • Nun editiert man die Info.plist des Skript-Programmes und denkst sich erst mal einen eigenen neuen CFBundleIdentifier aus. Das war in meinem Fall com.hubionmac.makemylist
  • nun kann das Skript beim ersten Aufruf prüfen ob es die default-application für csv dateien ist und nötigenfalls sich hierfür eintragen. Da das von Hand nur unsauber funktioniert, habe ich hierfür duti. Kurz die Routine sieht so aus:
    AppleScript Code

on open these_items
  repeat with this in these_items
    set thepath to quoted form of POSIX path of this
    display dialog thepath
  end repeat
end open

on run
  my setDefaultApplication()
end run


on setDefaultApplication()
  set dutipath to quoted form of POSIX path of (path to resource "duti")
  set changed to false
  try
    set theapp to last paragraph of (do shell script dutipath & " -x csv")
  on error
    set theapp to ""
  end try
  if theapp ≠ "com.hubionmac.makemylist" then
    do shell script dutipath & " -s com.hubionmac.makemylist csv all"
    set changed to true
  end if
  
  if changed is true then
    display alert "CSV-Dateien werden nun automatisch mit MakeMyList zuerst geöffnet."
    quit
  end if
end setDefaultApplication

									

D.h. über den on open-Handler wurden die Dateien verarbeitet und der on run-Handler stellte nötigenfalls die default Application um.

Das Problem seit 10.8

Mein Problem nun aber war, dass das nur bis einschließlich 10.7 funktionierte. Seit 10.8 wurde der on open-Handler nicht mehr ausgeführt, sobald eine Datei geöffnet wurde, sondern nur noch der on run-Handler. Das hat etwas mit GateKeeper und dem Sandboxing zu tun, wo genau das Problem liegt, weiss ich aber nicht genau.

Die allgemeine Lösung heisst Automator

Ich habe nun das AppleScript in Automator nachgebaut, d.h. den AppleScript Code etwas modifiziert und dann funktioniert der Mechanismus auch unter 10.8. Das liegt wohl daran, dass Automator-Anwendungen einen anderen Status genießen, als ordinär AppleScript-Anwendungen.
Zudem werden hier von Apple gleich passende CFBundleIdentifier beim Bennen des Automator-Jobs angelegt und so steht da nun automatisch com.apple.automator.MakeMyList in der info.plist des Automator-Jobs.
Das man beachten sollte ist nur der Speicherort von so Zusatzprogrammen wie duti im Programmpaket. Waren hier die Ressource beim AppleScript noch der passende Ort, sollte man bei Automator-Anwendungen tunlichst nicht unter Contents/Ressouces/ etwas speichern, da dieses Verzeichnis bei jedem Speichern des Automator-Workflows komplett überschrieben wird. Hier also am besten direkt unter /Contents/ ein Verzeichnis anlegen, da bleibt dann auch nach dem speichern von Änderungen am Workflow erhalten.

Bildschirmfoto 2013-09-03 um 02.36.16Bildschirmfoto 2013-09-03 um 02.36.41