Eindeutiger Name für DMGs

2

Wir haben einen Build-Prozess, der jetzt das übliche Layout für verteilte DMGs ausführt. Dies geschieht auf eine Art und Weise, die ich an vielen Stellen gesehen habe - die DMG ist angehängt, dann erledigt Finder seine Arbeit über Javascript. Das Skript muss jedoch anhand seines Datenträgernamens auf das bereitgestellte Image verweisen, und AFAICT, diese sind nicht eindeutig. Da der Rechner, auf dem diese Arbeit ausgeführt wird, nicht speziell dafür vorgesehen ist, befürchte ich, dass er möglicherweise bereits ein Image mit demselben Namen enthält (wahrscheinlich, da die Person, die mit diesem Rechner arbeitet, auch ein Client der generierten DMGs ist).

Gibt es eine Möglichkeit, im Javascript eindeutig auf eine Festplatte zu verweisen, wenn ich beispielsweise ihr Gerät oder ihren Mount-Punkt kenne? Oder gibt es eine andere Möglichkeit, das Problem zu beheben, z. B. ein Bild mit einem anderen Namen anzuhängen, damit ich einen zufällig generierten Namen übergeben kann?

(Ich bin überrascht, dass ich keine Erwähnung im Web gesehen habe. Vielleicht verpasse ich etwas Offensichtlicheres.)

Eli Barzilay
quelle
Sie möchten sich auf das <image name>.dmgoder beziehen /Volumes/<volume name>?
Duci9y
@ duci9y Das Skript hat tell disk <volname>und dieser Name ist möglicherweise nicht eindeutig.
Eli Barzilay

Antworten:

1

Nach langem Suchen und vielem Fluchen denke ich, dass dies wirklich ein Problem ist, von dem praktisch niemand etwas weiß oder sich Sorgen macht. Trotzdem konnte ich eine Lösung finden, es ist nicht großartig, aber es sollte funktionieren. Die Idee ist, die DMG in einem bekannten Verzeichnis mit einem zufälligen Namen zu mounten - dieser Name (das letzte Element im -mountpointPfad) ist die nameEigenschaft der Festplatte. nameWenn ich das benutze, gehe ich über alle Festplatten und suche nach passenden. Beschwere mich, wenn ich keine oder mehrere finde, ansonsten habe ich das benötigte Objekt bereit, mit dem ich arbeiten kann.

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 ...
Eli Barzilay
quelle