Eindeutiger Volname für DMGs

Wir haben einen Build-Prozess, der jetzt das allgemeine Layout für verteilte DMGs erstellt. Dies geschieht auf eine Weise, die ich an vielen Stellen gesehen habe – das DMG wird angehängt, dann erledigt der Finder seine Arbeit über Osascript. Das Skript muss sich jedoch auf das gemountete Image mit seinem Volume-Namen beziehen, und AFAICT, diese sind nicht eindeutig. Da die Maschine, die diese Arbeit ausführt, nicht dafür bestimmt ist, mache ich mir Sorgen, dass sie möglicherweise bereits ein gemountetes Image mit demselben Namen hat (wahrscheinlich, da die Person, die mit dieser Maschine arbeitet, auch ein Client der generierten DMGs ist).

Gibt es eine Möglichkeit, im Osascript eindeutig auf eine Festplatte zu verweisen, wenn ich beispielsweise ihr Gerät oder ihren Einhängepunkt kenne? Oder gibt es vielleicht eine andere Möglichkeit, dies zu lösen, z. B. das Anhängen eines Bildes mit einem anderen Volnamen, damit ich einen zufällig generierten Namen übergeben kann?

(Ich bin überrascht, dass ich im Internet keine Erwähnung davon gesehen habe, also übersehe ich vielleicht etwas Offensichtlicheres.)

<image name>.dmgSie möchten auf das oder verweisen /Volumes/<volume name>?
@duci9y Das Skript hat tell disk <volname>und dieser Name ist möglicherweise nicht eindeutig.

Antworten (1)

Nach langem Suchen und vielem Fluchen denke ich, dass dies wirklich ein Problem ist, das praktisch niemandem bewusst ist oder sich darüber Sorgen macht. Trotzdem konnte ich eine Lösung finden, es ist nicht großartig, aber es sollte funktionieren. Die Idee ist, das DMG in einem bekannten Verzeichnis mit einem zufälligen Namen einzuhängen – dieser Name (das letzte Element im -mountpointPfad) wird die nameEigenschaft der Festplatte sein. Wenn ich das verwende, gehe ich also über alle Festplatten und suche nach denen mit einem passenden name-- beschweren Sie sich, wenn ich keine oder mehr als eine finde, sonst habe ich das benötigte Objekt bereit, um damit zu arbeiten.

mnt="some-random-name-$$"
hdiutil attach -readwrite -noverify -noautoopen \
               -mountpoint "/tmp/$mnt" "/tmp/out.dmg"
/usr/bin/osascript <<-EOF
      tell application "Finder"
        set myDisks to every disk of desktop
        set theDMGDisk to ""
        repeat with d in myDisks
          if name of d = "$mnt"
            if theDMGDisk = ""
              set theDMGDisk to d
            else
              error "Too many attached DMGs found!"
            end if
          end if
        end repeat
        if theDMGDisk = "" then error "Attached DMG not found!"
        -- found a single matching disk, continue
        tell theDMGDisk
... etc ...